﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;
//Librerias Necesarias Para Redimensionar Imagenes
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Security.Permissions;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Data.OleDb;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.Configuration;


namespace FONCREAGROINTEGRAL.Controllers
{
    public class personalController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();

        public FONCREAGROINTEGRAL.Models.PERSONAL PERSONAL
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        public static Image ResizeImage(Image srcImage, int newWidth, int newHeight)
            {
                System.Drawing.Bitmap resizedImage = new System.Drawing.Bitmap(newWidth, newHeight);
                System.Drawing.Graphics.FromImage((System.Drawing.Image)resizedImage).DrawImage(srcImage, 0, 0, newWidth, newHeight);
                return (resizedImage);
            }

        public ActionResult IndexByIdEdit(int id)
         {
            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal == id);

            var result = (from p in query.ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          join bh in entidades.BANCOes on p.IdBancoHaberes equals bh.IdBanco into lbh
                          from x in lbh.DefaultIfEmpty()
                          join bcts in entidades.BANCOes on p.IdBancoCTS equals bcts.IdBanco into lbcts
                          from y in lbcts.DefaultIfEmpty()
                          select new
                          {
                              IdPersonal = p.IdPersonal,
                              ApePaterno = p.ApePaterno,
                              ApeMaterno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              IdNacionalidad = p.IdNacionalidad,
                              Nacionalidad=n.Nacionalidad1,
                              LugarNacimiento = p.LugarNacimiento,
                              IdTipoDI = p.IdTipoDI,
                              Descripcion = di.Descripcion,
                              NroDI = p.NroDI,
                              Direccion = p.Direccion,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Sexo = p.Sexo,
                              EstadoCivil = p.EstadoCivil,
                              EsSalud=p.EsSalud,
                              LicenciaConducir = p.LicenciaConducir,
                              TipoSangre = p.TipoSangre,
                              Discapacidad = p.Discapacidad,
                              Telefonocasa = p.Telefonocasa,
                              Celularpersonal = p.Celularpersonal,
                              Emailpersonal = p.Emailpersonal,
                              TelefenosIns = p.TelefenosIns,
                              Fotocheck = p.Fotocheck,
                              EmailCoorporativo = p.EmailCoorporativo,
                              ContactoEmergencia = p.ContactoEmergencia,
                              TelefonoContacto = p.TelefonoContacto,
                              IdBancoHaberes = p.IdBancoHaberes,
                              BancoHaberes = (x == null ? String.Empty : x.Nombre),
                              CtaHaberes = p.CtaHaberes,
                              IdBancoCTS = p.IdBancoCTS,
                              BancoCTS = (y == null ? String.Empty : y.Nombre),
                              CtaCTS = p.CtaCTS,

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult IndexActivos()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
            string apnombres = Convert.ToString(Request.QueryString["query"]);

            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }

         /*   var query = entidades.PERSONALs
                .Join(entidades.PERIODOLABORALs, p => p.IdPersonal, pl => pl.IdPersonal,(p ,pl )=>new { p.IdPersonal,
                p.ApePaterno,p.ApeMaterno,p.Nombres,p.IdTipoDI,p.IdNacionalidad,p.Direccion,p.Sexo,p.FechaNacimiento,p.Fotocheck,
                p.NroDI,p.TipoSangre,p.Celularpersonal,p.TelefenosIns,pl.IdMotivoFinDePeriodo})
                .Where(p => p.IdMotivoFinDePeriodo == null);
            */


            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal >= 1);

            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " + p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres).Skip(start).Take(limit).ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          select new
                          {
                              Id = p.IdPersonal,
                              Paterno = p.ApePaterno,
                              Materno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              ApeNombre = p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " + p.Nombres,
                              Direccion = p.Direccion,
                              Sexo = p.Sexo,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Fotocheck = p.Fotocheck,
                              Tipodi = di.Descripcion,
                              Nrodi = p.NroDI,
                              Tiposangre = p.TipoSangre,
                              Celularpersonal = p.Celularpersonal,
                              Celularins = p.TelefenosIns,
                             }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Index()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);


            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0,30);
                char[] MyChar = { '\\', '"' ,'}',']','[','}'};
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
           }


            var query = entidades.PERSONALs
             .Join(entidades.PERIODOLABORALs, p => p.IdPersonal, pl => pl.IdPersonal, (p, pl) => new
             {
                        p.IdPersonal,
                        p.ApePaterno,
                        p.ApeMaterno,
                        p.Nombres,
                        p.IdTipoDI,
                        p.IdNacionalidad,
                        p.Direccion,
                        p.Sexo,
                        p.FechaNacimiento,
                        p.Fotocheck,
                        p.NroDI,
                        p.TipoSangre,
                        p.Celularpersonal,
                        p.TelefenosIns,
                        pl.IdMotivoFinDePeriodo
                })
                .Where(p => p.IdMotivoFinDePeriodo == null);

            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " +p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p =>p.ApePaterno+" "+p.ApeMaterno+" "+p.Nombres).Skip(start).Take(limit).ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          select new
                          {
                              Id = p.IdPersonal,
                              Paterno = p.ApePaterno,
                              Materno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              ApeNombre = p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " +p.Nombres,
                              Direccion = p.Direccion,
                              Sexo = p.Sexo,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Fotocheck = p.Fotocheck,
                              Tipodi = di.Descripcion,
                              Nrodi = p.NroDI,
                              Tiposangre = p.TipoSangre,
                              Celularpersonal= p.Celularpersonal,
                              Celularins = p.TelefenosIns,
                              estado = (p.IdMotivoFinDePeriodo == null ? "[Activo]" : "[Inactivo]")

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        public ActionResult IndexById(int id)
        {
            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal == id);

            var result = (from p in query.ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          select new
                          {
                              Id = p.IdPersonal,
                              Paterno = p.ApePaterno,
                              Materno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              ApeNombre = p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " + p.Nombres,
                              Direccion = p.Direccion,
                              Sexo = p.Sexo,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Fotocheck = p.Fotocheck,
                              Tipodi = di.Descripcion,
                              Nrodi = p.NroDI,
                              Tiposangre = p.TipoSangre,
                              Celularpersonal = p.Celularpersonal,
                              Celularins = p.TelefenosIns,

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        // GET: /personal/directorio

        public ActionResult directorioActivos() {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
                if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }

            var query = entidades.PERSONALs

                .Join(entidades.CONTRATOADENDAPERSONALs, p => p.IdPersonal, cap => cap.IdPersonal, (p, cap) => new
                {
                    p.IdPersonal,
                    p.Nombres,
                    p.ApePaterno,
                    p.ApeMaterno,
                    p.Telefonocasa,
                    p.Celularpersonal,
                    p.TelefenosIns,
                    p.EmailCoorporativo,
                    cap.estado,
                    cap.nro,
                    cap.fechainicio,
                    cap.fechafin
                }).Where(cap => cap.estado == true);
            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.ApePaterno).Skip(start).Take(limit).ToList()
                          join posp in entidades.POSICIONPERSONAs on p.IdPersonal equals posp.IdPersonal
                          join pos in entidades.POSICIONs on posp.IdPosicion equals pos.IdPosicion
                          join ar in entidades.AREAs on pos.IdArea equals ar.IdArea
                          join motivo in entidades.PERIODOLABORALs on posp.IdPersonal equals motivo.IdPersonal
                          where posp.estado == true && motivo.IdMotivoFinDePeriodo == null//&& posp.estado == true
                          select new
                          {
                              Id = p.IdPersonal,
                              NomApe = p.Nombres + " " + p.ApePaterno + " " + p.ApeMaterno,
                              Area = ar.Nombre,
                              NumTelf = p.Telefonocasa,
                              CelPer = p.Celularpersonal,
                              CelInst = p.TelefenosIns,
                              Email = p.EmailCoorporativo,
                              NroContrato = p.nro,
                              FechaInicio = string.Format("{0:d}", p.fechainicio),
                              FechaFin = string.Format("{0:d}", p.fechafin),
                              Estado = (motivo.IdMotivoFinDePeriodo != null ? "Inactivo" : "Activo")
                 
                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
  
        public ActionResult directorio()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
            string apnombres = Convert.ToString(Request.QueryString["query"]);

            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }
            var query = entidades.PERSONALs
                .Join(entidades.CONTRATOADENDAPERSONALs, p => p.IdPersonal, cap => cap.IdPersonal, (p, cap) => new
                {
                    p.IdPersonal,
                    p.Nombres,
                    p.ApePaterno,
                    p.ApeMaterno,
                    p.Telefonocasa,
                    p.Celularpersonal,
                    p.TelefenosIns,
                    p.EmailCoorporativo,
                    cap.estado,
                    cap.nro,
                    cap.fechainicio,
                    cap.fechafin
                });//.Where(cap => cap.estado == true);
            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.ApePaterno).Skip(start).Take(limit).ToList()
                          //join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          //join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          //join cap in entidades.CONTRATOADENDAPERSONALs on p.IdPersonal equals cap.IdPersonal //into lmfp from x in lmfp.DefaultIfEmpty()
                          join posp in entidades.POSICIONPERSONAs on p.IdPersonal equals posp.IdPersonal
                          join pos in entidades.POSICIONs on posp.IdPosicion equals pos.IdPosicion
                          join ar in entidades.AREAs on pos.IdArea equals ar.IdArea
                          join motivo in entidades.PERIODOLABORALs on posp.IdPersonal equals motivo.IdPersonal
                          where posp.estado == true //&& posp.estado == true
                          select new
                          {
                              Id = p.IdPersonal,
                              NomApe = p.Nombres+" "+p.ApePaterno + " "+p.ApeMaterno,
                              Area = ar.Nombre,
                              NumTelf = p.Telefonocasa,
                              CelPer = p.Celularpersonal,
                              CelInst = p.TelefenosIns,
                              Email = p.EmailCoorporativo,
                              NroContrato= p.nro,
                              FechaInicio=string.Format("{0:d}", p.fechainicio),
                              FechaFin=string.Format("{0:d}",  p.fechafin),
                              Estado = (motivo.IdMotivoFinDePeriodo != null ? "Inactivo" : "Activo")
                              //Estado = (p.IdMotivoFinDePeriodo != null ? "Inactivo" : "Activo")

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        //
        // GET: /personal/directorio
        /*public ActionResult jefesarea()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal >= 1);
            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.ApePaterno).Skip(start).Take(limit).ToList()
                          //join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          //join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          join cap in entidades.CONTRATOADENDAPERSONALs on p.IdPersonal equals cap.IdPersonal //into lmfp from x in lmfp.DefaultIfEmpty()
                          join posp in entidades.POSICIONPERSONAs on 
                          join pos in entidades.POSICIONs on cap.IdPosicion equals pos.IdPosicion
                          join ar in entidades.AREAs on pos.IdArea equals ar.IdArea
                          where cap.estado == true && pos.IdCargo == 5
                          select new
                          {
                              Id = p.IdPersonal,
                              NomApe = p.Nombres + " " + p.ApePaterno + " " + p.ApeMaterno,
                              Area = ar.Nombre,
                              NumTelf = p.Telefonocasa,
                              CelPer = p.Celularpersonal,
                              CelInst = p.TelefenosIns,
                              Email = p.EmailCoorporativo,

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }*/
        //
        // GET: /personal/Details/5

        public ActionResult Guardianes()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.PERSONALs
                .Join(entidades.POSICIONPERSONAs, p => p.IdPersonal, pp => pp.IdPersonal, (p, pp) => new
                {
                    p.IdPersonal,
                    personal = p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres,
                    p.NroDI,
                    pp.estado,
                    pp.IdPosicion
                })
                .Where(p => p.estado == true)
                .Join(entidades.POSICIONs, p => p.IdPosicion, pos => pos.IdPosicion, (p, pos) => new { 
                    p.IdPersonal,
                    p.personal,
                    pos.IdCargo,
                    p.NroDI
                   })
                .Where(p => p.IdCargo == 114 );
                
                
            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.personal).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.personal).Skip(start).Take(limit).ToList()
                          select new
                          {
                              Id = p.IdPersonal,
                              Personal = p.personal,
                              Dni = p.NroDI

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        /*public ActionResult PrestamoAutorizado()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.PERSONALs
                .Join(entidades.POSICIONPERSONAs, p => p.IdPersonal, pp => pp.IdPersonal, (p, pp) => new
                {
                    p.IdPersonal,
                    Personal = p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres,
                    p.NroDI,
                    pp.estado,
                    pp.IdPosicion
                })
                .Where(p => p.estado == true);


            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.Personal).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.Personal).Skip(start).Take(limit).ToList()
                          select new
                          {
                              Id = p.IdPersonal,
                              Personal = p.Personal,
                              Dni = p.NroDI

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }*/


        public ActionResult PersonalActivo()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);
            int IdProyecto = Convert.ToInt32(Request.QueryString["IdProyecto"]);

            if (IdProyecto == 0) {
                IdProyecto = -1;
            }
            var query = entidades.PAPersonalByIdProyecto(IdProyecto).ToList();

            if (!String.IsNullOrEmpty(apnombres))
            {
                //query = query.Where(p => (p.Personal).ToUpper().Contains(apnombres.ToUpper()));
                query = query.Where(p => (p.Personal).ToUpper().Contains(apnombres.ToUpper())).ToList();
            }
            var result = query.Skip(start).Take(limit).ToList();

            /*var result = (from p in query.OrderBy(p => p.Personal).Skip(start).Take(limit).ToList()
                          select new
                          {
                              Id = p.IdPersonal,
                              Personal = p.Personal,
                              Dni = p.NroDI

                          }).ToList();*/

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /personal/Create

        //public ActionResult Create()
        //{
        //    var query = entidades.NACIONALIDADs.Select(n => new { n.IdNacionalidad, n.Nacionalidad1 }).OrderBy(n => n.Nacionalidad1);
        //    ViewData["IdNacionalidad"] = new SelectList(query.AsEnumerable(), "IdNacionalidad", "Nacionalidad1", 10);

        //    var query1 = entidades.TIPODOCUMENTOIDENTIDADs.Select(tdi => new { tdi.IdTipoDI, tdi.Descripcion }).OrderBy(tdi => tdi.IdTipoDI);
        //    ViewData["IdTipoDI"] = new SelectList(query1.AsEnumerable(), "IdTipoDI", "Descripcion", 1);

        //    List<SelectListItem> sexo = new List<SelectListItem>();
        //    sexo.Add(new SelectListItem { Text = "MASCULINO", Value = "M" });
        //    sexo.Add(new SelectListItem { Text = "FEMENINO", Value = "F" });
        //    ViewData["Sexo"] = new SelectList(sexo.AsEnumerable(), "value", "text");

        //    List<SelectListItem> estadocivil = new List<SelectListItem>();
        //    estadocivil.Add(new SelectListItem { Text = "SOLTERO(A)", Value = "SOLTERO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CASADO(A)", Value = "CASADO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CONVIVIENTE", Value = "CONVIVIENTE" });

        //    ViewData["EstadoCivil"] = new SelectList(estadocivil.AsEnumerable(), "value", "text");
            
        //    //
        //    List<SelectListItem> Discapacidad = new List<SelectListItem>();
        //    Discapacidad.Add(new SelectListItem { Text = "NO", Value = "false" });
        //    Discapacidad.Add(new SelectListItem { Text = "SI", Value = "true" });
        //    ViewData["Discapacidad"] = new SelectList(Discapacidad.AsEnumerable(), "value", "text");

        //    return View();
        //} 

        //
        // POST: /personal/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, PERSONAL PERSONAL, HttpPostedFileBase Archivofotox, HttpPostedFileBase Archivogs)
        {
            string strResponse = String.Empty;
            try{
                var cpersonal = new PERSONAL();
                if (ModelState.IsValid)
                {
                    string grupos2 = "";//Archivofoto.FileName.ToString();
                    string grupos = "";//Archivogs.FileName.ToString();
                    if (Archivogs != null)
                    {
                        grupos2 = Archivogs.FileName.ToString();
                        if (grupos2.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                        {
                            TryUpdateModel(cpersonal, collection.ToValueProvider());
                            entidades.AddToPERSONALs(cpersonal);
                            entidades.SaveChanges();
                            Archivogs.SaveAs(Server.MapPath("~/Content/RRHH/GrupoSanguineo/") + Convert.ToString(cpersonal.IdPersonal) + ".pdf");
                        }
                        else
                        {
                            strResponse = "{success: false,msg:'El grupo sanguíneo debe ser formato pdf'}";
                            return Content(strResponse);
                        }
                    }
                    else {

                        TryUpdateModel(cpersonal, collection.ToValueProvider());
                        entidades.AddToPERSONALs(cpersonal);
                        entidades.SaveChanges();
                    }
                    //Guardar Foto
                    if (Archivofotox != null)
                    {
                        Archivofotox.SaveAs(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                        //Image srcImage = Image.FromFile(Server.MapPath("~/Content/RRHH/Fotos/Temporales/" + Path.GetFileName(Archivofotox.FileName)));
                        System.IO.FileStream fs = new System.IO.FileStream(Server.MapPath("~/Content/RRHH/Fotos/Temporales/" + Path.GetFileName(Archivofotox.FileName)), System.IO.FileMode.Open);
                        Image srcImage = Image.FromStream(fs);
                        var ancho = srcImage.Width;
                        var alto = srcImage.Height;
                        /////Establecer ancho nuevo
                        var nuevoancho = 70;
                        var nuevoalto = 80;
                        Image image = ResizeImage(srcImage, nuevoancho, nuevoalto);
                        image.Save(Server.MapPath("~/Content/RRHH/Fotos/" + Convert.ToString(cpersonal.IdPersonal) + ".jpg"));

                        fs.Close();
                        System.IO.File.Delete(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                    }

                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);
                }
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }
        
        //
        // GET: /personal/Edit/5
 
        //public ActionResult Edit(int id)
        //{
        //    var epersonal = entidades.PERSONALs.Single(p => p.IdPersonal == id);

        //    var query = entidades.NACIONALIDADs.Select(n => new { n.IdNacionalidad, n.Nacionalidad1 }).OrderBy(n => n.Nacionalidad1);
        //    ViewData["IdNacionalidad"] = new SelectList(query.AsEnumerable(), "IdNacionalidad", "Nacionalidad1", epersonal.IdNacionalidad);

        //    var query1 = entidades.TIPODOCUMENTOIDENTIDADs.Select(tdi => new { tdi.IdTipoDI, tdi.Descripcion }).OrderBy(tdi => tdi.IdTipoDI);
        //    ViewData["IdTipoDI"] = new SelectList(query1.AsEnumerable(), "IdTipoDI", "Descripcion", epersonal.IdTipoDI);

        //    List<SelectListItem> sexo = new List<SelectListItem>();
        //    sexo.Add(new SelectListItem { Text = "MASCULINO", Value = "M" });
        //    sexo.Add(new SelectListItem { Text = "FEMENINO", Value = "F" });
        //    ViewData["Sexo"] = new SelectList(sexo.AsEnumerable(), "value", "text", epersonal.Sexo);

        //    List<SelectListItem> estadocivil = new List<SelectListItem>();
        //    estadocivil.Add(new SelectListItem { Text = "SOLTERO(A)", Value = "SOLTERO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CASADO(A)", Value = "CASADO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CONVIVIENTE", Value = "CONVIVIENTE" });

        //    ViewData["EstadoCivil"] = new SelectList(estadocivil.AsEnumerable(), "value", "text", epersonal.EstadoCivil);

        //    //
        //    List<SelectListItem> Discapacidad = new List<SelectListItem>();
        //    Discapacidad.Add(new SelectListItem { Text = "NO", Value = "false" });
        //    Discapacidad.Add(new SelectListItem { Text = "SI", Value = "true" });
        //    ViewData["Discapacidad"] = new SelectList(Discapacidad.AsEnumerable(), "value", "text", epersonal.Discapacidad);

        //    return View(epersonal);
        //}

        //
        // POST: /personal/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection, PERSONAL PERSONAL, HttpPostedFileBase Archivofotox, HttpPostedFileBase Archivogs)
        {
            string strResponse = String.Empty;
            var epersonal = entidades.PERSONALs.Single(p => p.IdPersonal == id);

        try
            {
                if (ModelState.IsValid)
                {
                    //epersonal.ApePaterno = apepaterno;
                    TryUpdateModel(epersonal);
                    entidades.SaveChanges();

                    string nombre = "";//Archivofoto.FileName.ToString();
                    string grupos = "";//Archivogs.FileName.ToString();

                    if (Archivofotox != null) { 
                        
                        nombre = Archivofotox.FileName.ToString();
                        if (nombre.EndsWith(".jpg") || nombre.EndsWith(".JPG") || nombre.EndsWith(".jpeg") || nombre.EndsWith(".JPEG"))
                        {
                            Archivofotox.SaveAs(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                            //Image srcImage = Image.FromFile(Server.MapPath("~/Content/RRHH/Fotos/Temporales/" + Path.GetFileName(Archivofotox.FileName)));
                            System.IO.FileStream fs = new System.IO.FileStream(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName), System.IO.FileMode.Open);
                            Image srcImage = Image.FromStream(fs);
                            var ancho = srcImage.Width;
                            var alto = srcImage.Height;
                            /////Establecer ancho nuevo
                            /////Establecer ancho nuevo
                            var nuevoancho = 70;
                            var nuevoalto = 80;
                            Image image = ResizeImage(srcImage, nuevoancho, nuevoalto);
                            image.Save(Server.MapPath("~/Content/RRHH/Fotos/" + Convert.ToString(epersonal.IdPersonal) + ".jpg"));
                            fs.Close();
                            System.IO.File.Delete(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                        }
                    
                    }
                    string grupos2 = "";
                    if (Archivogs != null)
                    {
                        grupos2 = Archivogs.FileName.ToString();
                        if (grupos2.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                        {
                            Archivogs.SaveAs(Server.MapPath("~/Content/RRHH/GrupoSanguineo/") + Convert.ToString(epersonal.IdPersonal) + ".pdf");
                        }
                        else{
                            strResponse = "{success: false,msg:'El grupo sanguíneo debe ser formato pdf'}";
                            return Content(strResponse);
                        }
                    }

                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);

                }
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }

        //
        // GET: /personal/Delete/5
 /*
        public ActionResult Delete(int id)
        {
            return View();
        }
        */
        //
        // POST: /personal/Delete/5

        public ActionResult Delete(int id, FormCollection collection)
        {
            string strResponse = String.Empty;
            var contratos = 0;
            var periodoLaboral= 0;
            var epersonal = entidades.PERSONALs.Single(e => e.IdPersonal == id);
            //var contratos = entidades.CONTRATOADENDAPERSONALs.Single(c =>c.idcontratoadendapersonal==epersonal.IdPersonal);
            contratos = entidades.CONTRATOADENDAPERSONALs.Count(c => c.IdPersonal == epersonal.IdPersonal);
            //var periodoLaboral = entidades.PERIODOLABORALs.Single(p => p.IdPersonal==epersonal.IdPersonal);
            periodoLaboral = entidades.PERIODOLABORALs.Count(p => p.IdPersonal == epersonal.IdPersonal);
            try
            {
                if (epersonal != null && (contratos.ToString() == "0") && (periodoLaboral.ToString() == "0"))
                {
                    //var context = new SistIntFoncreagroEntities();
                    entidades.PERSONALs.DeleteObject(epersonal);
                    //context.PERSONALs.DeleteObject(epersonal);
                    entidades.SaveChanges();
                    return Content("OK");
                }
                return Content("Error");
            }
            catch (Exception e)
            {
                strResponse = "{success: false,msg:'" + e.Message + "'}";
                return Content(strResponse);
            }
        }

        public ActionResult ReportaAsistencia()
        {
            int IdPersonal = -1;
            if (!String.IsNullOrEmpty(Request.QueryString["IdPersonal"]))
            {
                IdPersonal = Convert.ToInt32(Request.QueryString["IdPersonal"]);
            }
            DateTime FechaInicio=Convert.ToDateTime(Request.QueryString["FechaInicio"]);
            DateTime FechaFin = Convert.ToDateTime(Request.QueryString["FechaFin"]);

            int IdProyecto=-1;
            if (!String.IsNullOrEmpty(Request.QueryString["IdProyecto"]))
            {
                IdProyecto = Convert.ToInt32(Request.QueryString["IdProyecto"]);
            }

            var listaAsistencias = entidades.PAAsistenciaPersonal(IdPersonal, FechaInicio, FechaFin, IdProyecto).ToList();
            return Json(new { grid = listaAsistencias, total = listaAsistencias.Count() }, JsonRequestBehavior.AllowGet);

        }

        [HttpPost]
        public ActionResult SubirExcel(HttpPostedFileBase fileData)
        {
            string strResponse = String.Empty;

            try
            {
                if (fileData != null)
                {
                    fileData.SaveAs(Server.MapPath("~/Content/Excel/") + Path.GetFileName(fileData.FileName));
                    OleDbConnection connection;
                    SqlBulkCopy bulkCopy;


                    string strConnString = ConfigurationManager.ConnectionStrings["ASPNETDB"].ConnectionString;
                    //string ConnectionString = @"server=LPFONCRE33\SQLEXPRESS;database=SistIntFoncreagro;uid=sa;pwd=Foncre@gro2012;";
                        
                    string connstr="";
                    string cadena = "";

                    if (fileData.FileName.Trim().EndsWith(".xlsx"))
                    {
                        connstr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", Convert.ToString(Server.MapPath("~/Content/Excel/" + Path.GetFileName(fileData.FileName))));
                        cadena = fileData.FileName.Substring(0, fileData.FileName.Length - 5);
                    }
                    else 
                        if (fileData.FileName.Trim().EndsWith(".xls"))
                        {
                            cadena = fileData.FileName.Substring(0, fileData.FileName.Length - 4);
                            connstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", Convert.ToString(Server.MapPath("~/Content/Excel/" + Path.GetFileName(fileData.FileName))));
                        }
                        else
                        {
                            cadena = fileData.FileName;
                            connstr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR=No;FMT=Delimited(,)';", Convert.ToString(Server.MapPath("~/Content/Excel/")));
                        }

                    Console.WriteLine(cadena);
                    Console.WriteLine(connstr);

                    strResponse = "{success: true,msg:'" + connstr + "'}";

                    using (connection = new OleDbConnection(connstr))
                    {
                        //cambiar [Sheet1$] con el nombre de la hoja del excel
                        
                        OleDbCommand command;

                        if (fileData.FileName.Trim().EndsWith(".CSV") || fileData.FileName.Trim().EndsWith(".csv"))
                            { command = new OleDbCommand("Select * FROM [" + cadena + "]", connection); }
                        else
                            { command = new OleDbCommand("Select * FROM [" + cadena + "$A1:E65536]", connection); }

                        connection.Open();
                        strResponse = "{success: true, msg: despues de coneccion'" + command.CommandText + "'}";
                        // Create DbDataReader to Data Worksheet
                        using (OleDbDataReader dr = command.ExecuteReader())
                        {
                            using (bulkCopy = new SqlBulkCopy(strConnString)) //ConnectionString
                            {
                                /*bulkCopy.ColumnMappings.Add("Machine ID", "Machine ID");
                                bulkCopy.ColumnMappings.Add("Card ID", "Card ID");
                                bulkCopy.ColumnMappings.Add("Event", "Event");
                                bulkCopy.ColumnMappings.Add("Date", "Date");
                                bulkCopy.ColumnMappings.Add("Time", "Time");*/
                                bulkCopy.DestinationTableName = "TBLAsistenciaTemp";
                                bulkCopy.WriteToServer(dr);
                                strResponse = "{success: true,msg: TBLAsistenciaTemp'" + Convert.ToString(dr.FieldCount) + "'}";
                            }
                            dr.Close();
                        }
                    }

                    bulkCopy.Close();
                    connection.Close();
                    strResponse = "{success: true,msg: Antes de Procedure'}";
                    entidades.PAInsertarTBLAsistencia();
                    System.IO.File.Delete(Server.MapPath("~/Content/Excel/") + Path.GetFileName(fileData.FileName));
                }
                string nombre = fileData.FileName.ToString();
                strResponse = "{success: true,msg:'El Archivo " + nombre + " Se ha Procesado Correctamente'}";
                return Content(strResponse);
            }

            catch (Exception e)
            {
                string sms = e.Message;
                strResponse = "{success: false,msg:\"" + sms + "\"}";
                return Content(strResponse);
            }
        }


        public ActionResult Reportdv()
        {

            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/Content/Reportes/RptPersona.rdlc");
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RptPERSONAS(1));
            localReport.DataSources.Add(reportDataSource);
            string reportType = "EXCEL";
            string mimeType = "application/vnd.ms-excel";
            string encoding;
            string fileNameExtension = "xls";
            String deviceInfo = "";
            /*  string deviceInfo =
               "<DeviceInfo>" +
            "  <OutputFormat>EXCEL</OutputFormat>" +
            "  <PageWidth>10in</PageWidth>" +
            "  <PageHeight>15in</PageHeight>" +
            "  <MarginTop>0in</MarginTop>" +
            "  <MarginLeft>0in</MarginLeft>" +
            "  <MarginRight>0in</MarginRight>" +
            "  <MarginBottom>0in</MarginBottom>" +
            "</DeviceInfo>";*/
            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;
            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);
            Response.Clear();
            Response.ContentType = mimeType;
            Response.AddHeader("content-disposition", "attachment; filename=ReportePersonal.xls");
            Response.BinaryWrite(renderedBytes);
            Response.End();
            return File(renderedBytes, mimeType);
        }



    }
}
